package com.hoshiicloud.mallshop.component;

import com.hoshiicloud.goods.entity.sku.BaseSku;
import com.hoshiicloud.goods.entity.sku.ExtSku;
import com.hoshiicloud.goods.entity.sku.ProductManage;
import com.hoshiicloud.goods.entity.sku.VendorGoodsSku;
import com.hoshiicloud.goods.entity.spu.BaseSpu;
import com.hoshiicloud.goods.entity.spu.ExtSpu;
import com.hoshiicloud.goods.param.goods.GoodsReleaseSkuParam;
import com.hoshiicloud.goods.param.goods.GoodsReleaseSpuParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.ThreadLocalRandom;

/**
 *  linjx  2019/8/12
 */
@Component
public class GoodsReleaseComponent {

    /**
     * 设置BaseSpu需要保存的值
     *  status: 上下架状态： baseSpu 始终处于上架状态
     */
    private BaseSpu setBaseSpuValue(GoodsReleaseSpuParam param, Integer status) {

        BaseSpu baseSpu = new BaseSpu();
        // 公司Id
        baseSpu.setCompanyId(param.getCompanyId());
        // 名称
        baseSpu.setTitle(param.getTitle());
        // 商品类目Id
        baseSpu.setCategoryId(param.getCategoryArr()[param.getCategoryArr().length-1]);
        // 类目描述
        baseSpu.setCategoryDescribe(StringUtils.join(param.getCategoryArr(),","));
        // 品牌
        baseSpu.setBrandId(param.getBrandId());
        // 商品类型
        baseSpu.setProductType(param.getProductType());
        // 采购类型
        baseSpu.setPurchaseType(param.getPurchaseType());
        // 属性
        baseSpu.setExtendProperty(param.getExtendProperty());
        // 图片
        baseSpu.setDefaultImage(param.getDefaultImage());
        // 上下架
        baseSpu.setStatus(status);

        return baseSpu;
    }

    /**
     * 设置ExtSpu需要保存的值
     * ExtSpu/Sku 上下架状态根据前端而定
     */
    private ExtSpu setExtSpuValue(GoodsReleaseSpuParam param, BaseSpu baseSpu) {

        ExtSpu extSpu = new ExtSpu();

        //平台商铺等信息
        extSpu.setCompanyId(param.getCompanyId());
        extSpu.setPlatformId(param.getPlatformId());
        extSpu.setStoreId(param.getStoreId());
        extSpu.setCreatedBy(param.getCreateBy());
        // spuId
        extSpu.setSpuId(baseSpu.getId());
        // 商品标题
        extSpu.setTitle(baseSpu.getTitle());
        // 图片
        extSpu.setSpuImage(param.getDefaultImage());
        // 主图视频
        extSpu.setSpuVideo(param.getSpuVideo());
        // 图文描述
        extSpu.setSpuDescription(param.getSpuDescription());
        // 售后说明
        extSpu.setServiceDescription(param.getServiceDescription());
        // 购买须知
        extSpu.setNotice(param.getNotice());
        // 横图
        extSpu.setHImage(param.getHeImage());
        // 竖图
        extSpu.setVImage(param.getVeImage());

        return extSpu;
    }


    /**
     *  设置BaseSku需要保存的值
     *
     */
    private BaseSku setBaseSkuValue(GoodsReleaseSkuParam sku, BaseSpu baseSpu, Integer status) {

        BaseSku baseSku = new BaseSku();

        //平台商铺等信息
        baseSku.setCompanyId(baseSpu.getCompanyId());
        // spuid
        baseSku.setSpuId(baseSpu.getId());
        // 商品标题
        baseSku.setSkuTitle(baseSpu.getTitle());
        // 销售单位（*）
        baseSku.setSalesUnit(sku.getSalesUnit());
        // 条形码
        baseSku.setBarCode(sku.getBarCode());
        // 箱码
        baseSku.setPacketCode(sku.getPacketCode());
        // 上下架
        baseSku.setStatus(status);
        // 规格
        baseSku.setExtendSpec(sku.getExtendSpec());

        return baseSku;
    }

    /**
     *  设置ExtSku需要保存的值
     */
    private ExtSku setExtSkuValue(GoodsReleaseSkuParam skuParam, BaseSpu baseSpu, ExtSpu extSpu, BaseSku baseSku) {

        ExtSku extSku = new ExtSku();

        // 设置公司（租户）/平台/店铺，创建人 等相关信息
        extSku.setCompanyId(baseSpu.getCompanyId());
        extSku.setPlatformId(baseSpu.getPlatformId());
        extSku.setStoreId(baseSpu.getStoreId());

        // ExtSku中的 spuId 对应的是 ExtSpu中的Id
        extSku.setSpuId(extSpu.getId());
        extSku.setSkuId(baseSku.getId());
        extSku.setSkuTitle(baseSpu.getTitle());

        // sku 图片
        extSku.setSkuImage(skuParam.getSkuImage());
        // 售价
        extSku.setSalePrice(skuParam.getSalePrice());
        // 市场价
        extSku.setMarketPrice(skuParam.getMarketPrice());
        // 成本价
        extSku.setCostPrice(skuParam.getCostPrice());
        // 是否库库存足够才能下单  1 是 0 否
        extSku.setStoreEnough(1);

        return extSku;
    }

    /**
     *  设置供应商sku需要保存的值
     */
    private VendorGoodsSku setVendorGoodsSkuValue(GoodsReleaseSkuParam skuParam, BaseSpu baseSpu, BaseSku baseSku) {

        VendorGoodsSku vendorSku = new VendorGoodsSku();

        // 设置公司（租户）/平台/店铺，创建人 等相关信息
        vendorSku.setCompanyId(baseSpu.getCompanyId());
        vendorSku.setPlatformId(baseSpu.getPlatformId());
        vendorSku.setStoreId(baseSpu.getStoreId());

        // skuId
        vendorSku.setSkuId(baseSku.getId());
        // spuId
        vendorSku.setSpuId(baseSpu.getId());
        // 条形码
        vendorSku.setBarCode(skuParam.getBarCode());
        // 箱码
        vendorSku.setPacketCode(skuParam.getPacketCode());
        // 包装单位
        vendorSku.setPacketUnit(skuParam.getPacketUnit());
        // 内件数
        vendorSku.setInnerBoxs(skuParam.getInnerBoxs());
        // 商品重量
        vendorSku.setWeight(skuParam.getWeight());
        // 供价（不含税）
        vendorSku.setUnitPrice(skuParam.getUnitprice());
        // 供价（含税）
        vendorSku.setTaxUnitprice(skuParam.getTaxUnitprice());
        // 增值税率
        vendorSku.setTaxRate(skuParam.getTaxRate());
        // 采购类型
        vendorSku.setVendorPoType(baseSpu.getPurchaseType());

        return vendorSku;
    }

    /**
     *  设置SKU分配需要保存的值
     */
    private ProductManage setProductManageValue(GoodsReleaseSkuParam skuParam, BaseSpu baseSpu, BaseSku baseSku, ExtSku extSku) {

        ProductManage product = new ProductManage();

        // 设置公司（租户）/平台/店铺，创建人 等相关信息
        product.setCompanyId(baseSpu.getCompanyId());
        product.setPlatformId(baseSpu.getPlatformId());
        product.setStoreId(baseSpu.getStoreId());

        product.setSkuName(extSku.getSkuTitle());
        product.setSkuId(extSku.getId());
        product.setSkuNo(baseSku.getSkuNo());
        product.setQuantity(new BigDecimal(skuParam.getQuantity()));
        product.setUnit(skuParam.getPacketUnit());

        // 来源 1-租户 2-平台  3-店铺
        if (baseSpu.getStoreId() != null) {
            product.setSource(3);
        }else if (baseSpu.getPlatformId() != null) {
            product.setSource(2);
        }else {
            product.setSource(1);
        }
        return product;
    }

    /**
     *  spu编码生成
     *  类目编码+商品类型+年月日（各取2位）+秒数（创建时间时分秒转换成秒数）+7位随机数
     */
    private String creteSpuCode(String categoryCode, Integer purchaseType, LocalDateTime createTime) {
        StringBuffer spuCode = new StringBuffer(categoryCode.replace(",", ""));
        spuCode.append(purchaseType);
        spuCode.append(DateTimeFormatter.ofPattern("yyMMdd").format(createTime));
        spuCode.append(createTime.toLocalTime().toSecondOfDay());
        spuCode.append(ThreadLocalRandom.current().nextInt(1000000, 9999999));
        return spuCode.toString();
    }

    /**
     *  sku编码生成
     *  SPU_CODE+序号（最大99，从01开始）
     */
    private String createSkuCode(String spuNo, String skuNo) {
        if (StringUtils.isBlank(skuNo)) {
            return spuNo + "01";
        }else {
            // 截取skuNo后两位
            String numStr = skuNo.substring(spuNo.length() - 2);
            // 自增1
            long num = Long.parseLong(numStr);
            String lastNo = String.format("%02d", ++num);
            // 截取原先skuNo 除了后两位的前面的位数
            String baseNo = spuNo.substring(0, spuNo.length() - 2);
            return baseNo + lastNo;
        }
    }
}
